# ifndef __WIDGETLIENZOGTKMM_H__

# define __WIDGETLIENZOGTKMM_H__

# include <iostream>

using namespace std;

# include <libglademm/xml.h>

# include <gtkmm.h>

# include <vector>  

# include "modelo.h"

# include "lienzo.h"

# include "punto.h"

# include "vista.h"

typedef Glib::RefPtr<Gnome::Glade::Xml> xmlref_t;

class WidgetLienzogtkmm : public Vista
{
	public:
		
		WidgetLienzogtkmm(xmlref_t& ref);
		
		WidgetLienzogtkmm(const WidgetLienzogtkmm&) 
		{
		};
		
		~WidgetLienzogtkmm() 
		{
		};
		
		void actualizar() 
		{ 
			pintar(); 
		};
	
	private:
		
		Punto anterior;
		
		Punto primero;

		Gtk::DrawingArea* drawArea;
		
		Gtk::Button* BSeleccionar;
		
		Gtk::Button* BPunto;
		
		Gtk::Button* BLinea; 
		
		Gtk::Button* BRectangulo; 
		
		Gtk::Button* BPoligono;
		
		Gtk::Button* BCirculo;
		
		Gtk::Button* BAgrupar;
		
		Gtk::Button* BDesagrupar;
		
		Gtk::Button* BCopiar;
		
		Gtk::Button* BCortar;
		
		Gtk::Button* BPegar;
		
		Gtk::Button* BEliminar;
		
		Gtk::Button* BColor;
		
		Gtk::MenuItem* MNuevo;
		
		Gtk::MenuItem* MAbrir;
		
		Gtk::MenuItem* MGuardar;
		
		Gtk::MenuItem* MGuardarComo;
		
		Gtk::MenuItem* MCortar;
		
		Gtk::MenuItem* MCopiar;
		
		Gtk::MenuItem* MPegar;
		
		Gtk::MenuItem* MDeshacer;
		
		Gtk::MenuItem* MRehacer;
		
		Gtk::AboutDialog* MAbout;
		
		Glib::RefPtr<Gdk::Window> dw;
		
		Glib::RefPtr<Gdk::GC> gc;
		
		Gtk::HScale* sliderR;
		
		Gtk::HScale* sliderG;
		
		Gtk::HScale* sliderB;
		
		Gtk::Button* botonCambiaColor;
		
		void iniciar();
		
		bool pintar(GdkEventExpose * e = NULL);
		
		void update() 
		{
			pintar();
		};
		
		void pintaFigura (Figura*, bool = false, bool = false);		
		
		bool click(GdkEventButton* event);
		
		bool mover(GdkEventMotion* event);
		
		bool soltar(GdkEventButton* event);
		
		bool pinchaDentro(float, float);
		
		void copiaEvento();
		
		void pegaEvento();
		
		void cortaEvento(); 
		
		void borraEvento();
		
		void agrupaEvento();
		
		void desagrupaEvento();
		
		void deshacerEvento() 
		{
			lienzo->Deshacer();
			
			actualizar();
		};
		
		void rehacerEvento() 
		{
			lienzo->Rehacer();
			
			actualizar();
		};
		
		void cambiarColor();
		
		void colorBoton();
		
		void Nuevo() 
		{
			lienzo->Iniciar(); 
			
			update();  
		};
		
		void Abrir();
		
		void Guardar();
		
		void GuardarComo();
		
		void mostrarAbout ();
				
		virtual void setAccionP () 		
		{ 
			accion = punto;		
			
			setAccion();
		};
		
		virtual void setAccionR () 		
		{ 
			accion = rectangulo;	
			
			setAccion();
		};
		
		virtual void setAccionPol () 	
		{ 
			accion = poligono; 	
			
			setAccion();
		};
		
		virtual void setAccionL () 
		{ 
			accion = linea; 		
			
			setAccion();
		};
		
		virtual void setAccionS () 
		{ 
			accion = seleccionar;	
			
			setAccion();
		};
		
		virtual void setAccionC () 		
		{ 
			accion = circulo;		
			
			setAccion();
		};

};

# endif
